package com.shift.sdk;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.shift.ccsdk.CCSDK;
import com.shift.ccsdk.CCSDKCallback;
import com.shift.ccsdk.CCServiceInstallActivity;
import com.shift.sdk.R;

/**
 * アプリケーション初期化アクティビティ.
 *
 * @author SHIFT
 */
public class InitializeActivity extends Activity implements CCSDKCallback {

    /**
     * プロキシアドレス.
     */
    private EditText editProxyAddress;

    /**
     * ポート番号.
     */
    private EditText editProtNumber;

    /**
     * プロキシ有効化チェックボックス.
     */
    private CheckBox chkUseProxy;

    /**
     * アクティビティ起動時の処理.
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // エンジンバージョン番号を出力
        Log.i("CCSDK", "CCSDK for Android ver." + CCSDK.getCCSDKVersion());

        SharedPreferences pref = this.getApplicationContext().getSharedPreferences("SDKSample1",
                Context.MODE_PRIVATE);
        // ライセンス認証が実施されているか
        if (pref.getBoolean("Activation", false))
        {
            // CCSDK開始処理
            if (CCSDK.startup(getApplicationContext(), this)) {
                // 認証済みの場合は設定を保存する。
                Editor prefedit = pref.edit();
                prefedit.putBoolean("Activation", true);
                prefedit.commit();
                return;
            }
        }

        // ライセンス認証されていない場合
        // 画面を表示するための設定
        setContentView(R.layout.initialize);

        // プロキシの有効化チェックボックス
        chkUseProxy = (CheckBox) findViewById(R.id.check_use_proxy);

        // プロキシアドレス
        editProxyAddress = (EditText) findViewById(R.id.edit_proxy_address);
        editProxyAddress.setText(CCSDK.getProxyAddress(getApplicationContext()));

        // ポート番号
        editProtNumber = (EditText) findViewById(R.id.edit_proxy_port);
        editProtNumber.setText(CCSDK.getProxyPort(getApplicationContext()));
    }

    /**
     * 追加ボタン押下時の処理
     *
     * @param v
     */
    public void onClick_btnOK(View v) {
        // プロキシアドレス・ポート番号の保存
        if (chkUseProxy.isChecked())
        {
            CCSDK.setProxyAddressPort(getApplicationContext(),
                    editProxyAddress.getText().toString(),
                    editProtNumber.getText().toString());
        }
        else
        {
            CCSDK.setProxyAddressPort(getApplicationContext(),
                    "",
                    "");
        }

        Intent intent = new Intent(InitializeActivity.this, CCServiceInstallActivity.class);
        startActivityForResult(intent, 999);

    }

    /**
     * チェックボックス押下時の処理
     *
     * @param v
     */
    public void onClick_chkUseProxy(View v) {
        View layout = findViewById(R.id.layout_proxy_info);
        layout.setVisibility(chkUseProxy.isChecked() ? View.VISIBLE : View.GONE);
    }

    /**
     * キャンセルボタン押下時の処理
     *
     * @author SHIFT
     */
    public void onClick_btnCancel(View v) {
        finish();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // インストールチェックOK
        if (resultCode == RESULT_OK) {

            // CCSDK開始処理
            CCSDK.startup(getApplicationContext(), this);
            return;
        }else if(resultCode == CCServiceInstallActivity.RESULT_MEDIA_REMOVED){
            Toast.makeText(getApplicationContext(), "SDカードがマウントされていない為、認証アプリのインストールに失敗しました。",
                    Toast.LENGTH_LONG).show();
        }else if(resultCode == CCServiceInstallActivity.RESULT_NG){
            Toast.makeText(getApplicationContext(), "ネットワークの設定不備またはSDカードの空き容量が不足している為、認証アプリのインストールに失敗しました。",
                    Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "認証アプリのインストールをキャンセルしました",
                    Toast.LENGTH_SHORT).show();
        }
        // 初期化アクティビティを終了
        finish();
    }

    /**
     * サービスバインドコールバック
     *
     * @param resultCode
     *            サービスへのコネクションが成功した場合は、CCSDKCallback.SERVICE_CONNECTEDです。
     */
    @Override
    public void onServiceBind(int resultCode) {

        if (resultCode == CCSDKCallback.SERVICE_CONNECTED)
        {
            // メインアクティビティを起動
            Intent intent = new Intent(InitializeActivity.this, MainActivity.class);
            startActivity(intent);

            // 初期化アクティビティを終了
            finish();
        }
    }

}
